package Thread.day01;

/**
 * 测试Thread的常用方法
 * 1.start():启动当前线程，调用当前线程的run()方法
 * 2.run()：需要重写Thread中的run方法，将创建线程所需要执行的操作声明在run中
 * 3.currentThread():静态方法，返回执行当前代码的线程
 * 4.getName():获取当前线程的名字
 * 5.setName("名字")：设置当前线程的名字
 * 6.yield():释放当前cpu的执行权,但不会进入阻塞状态，而是cpu重新分配执行权
 * 7.join()：在线程a中调用线程b的join方法，此时线程a进入阻塞状态，直到线程b完全执行完以后
 * 线程a才结束阻塞状态
 * 8.stop():已过时，当执行此方法，强制结束当前线程
 * 9.sleep(毫秒):让当前线程睡眠指定的毫秒数，在指定的时间内当前线程是阻塞状态
 * 10.isAlive():判断当前线程是否存活
 * <p>
 * 线程的优先级（1-10）
 * MAX_PRIORITY:10最大
 * MIN_PRIORITY:1最小
 * NORM_PRIORITY:5默认
 * getPriotity():获取线程的优先级
 * setPriority(int 优先级)：设置当前线程的优先级
 * <p>
 * 说明：高优先级指的是高概率被分配cpu，并不意味着先执行玩高优先级在执行低优先级
 */
public class ThreadMethodTest {
    public static void main(String[] args) {
        helloThread h1 = new helloThread();
        System.out.println(h1.getName());//Thread-0
        h1.setPriority(8);
        h1.setName("线程1");
        System.out.println(h1.getName());//线程1
        System.out.println(h1.getPriority());//8
        h1.start();

        //给主线程命名，当前是main
        Thread.currentThread().setName("主线程");
        Thread.currentThread().setPriority(Thread.MIN_PRIORITY);

        for (int i = 0; i < 100; i++) {
            if (i % 2 != 0) {
                System.out.println(Thread.currentThread().getName() + ":" + i);

            }
            if (i == 19) {
                try {
                    h1.join();
                    System.out.println(Thread.currentThread().isAlive()+Thread.currentThread().getName());
                    //另一个线程加入，夺取cpu直到执行完才执行主线程
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }
        System.out.println(h1.isAlive());
    }
}

    class helloThread extends Thread {
        @Override
        public void run() {
            for (int i = 0; i < 100; i++) {
                if (i % 2 == 0) {
                    try {
                        sleep(10);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    System.out.println(this.getName() + ":" + i);
                }
                if (i % 20 == 0) {
                    yield();
                }
            }

        }
    }
